#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

int yes_or_no = 0;//先定义饭的数量为0

pthread_mutex_t mutex;//定义一个锁
pthread_cond_t cond;//定义一个条件变量

void *customer(void *arg)//用户线程的入口函数
{
    while(1) {
        pthread_mutex_lock(&mutex);
        while(yes_or_no == 0) {//循环判断
            pthread_cond_wait(&cond, &mutex);
        }
        yes_or_no = 0;
        printf("焖面真好吃！！！再来一碗\n");
        pthread_mutex_unlock(&mutex);//解锁
        pthread_cond_signal(&cond);//唤醒厨师（真的是唤醒厨师吗？）
    }
    return NULL;
}
void *cook(void *arg)
{
    while(1) {
        pthread_mutex_lock(&mutex);
        while(yes_or_no == 1) {
            pthread_cond_wait(&cond, &mutex);
        }
        yes_or_no = 1;
        printf("同学，你的饭好了~！\n");
        pthread_mutex_unlock(&mutex);
        pthread_cond_signal(&cond);//唤醒顾客（真的是唤醒顾客吗？）
    }
    return NULL;
}

int main()
{
    int ret;
    pthread_t cus_tid[4], cook_tid[4];

    //int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *)
    pthread_mutex_init(&mutex, NULL);//初始化
    pthread_cond_init(&cond, NULL);//初始化
    for (int i = 0; i < 4; i++) {
        ret = pthread_create(&cus_tid[i], NULL, customer, NULL);//创建4个顾客线程
        if (ret != 0) {
            printf("create thread error\n");
            return -1;
        }
        ret = pthread_create(&cook_tid[i], NULL, cook, NULL);//创建4个厨师线程
        if (ret != 0) {
            printf("create thread error\n");
            return -1;
        }
    }
    for (int i = 0; i < 4; i++) {//等待线程退出
        pthread_join(cus_tid[i], NULL);
        pthread_join(cook_tid[i], NULL);
    }
    pthread_mutex_destroy(&mutex);//销毁
    pthread_cond_destroy(&cond);//销毁条件变量
    return 0;
}
